Function: completion-pcm--string->pattern
completion-pcm--string->pattern is a byte-compiled function defined in
minibuffer.el.gz.
Signature
(completion-pcm--string->pattern STRING &optional POINT)
Documentation
Split STRING into a pattern.
A pattern is a list where each element is either a string
or a symbol, see completion-pcm--merge-completions.
Source Code
;; Defined in /usr/src/emacs/lisp/minibuffer.el.gz
(defun completion-pcm--string->pattern (string &optional point)
"Split STRING into a pattern.
A pattern is a list where each element is either a string
or a symbol, see `completion-pcm--merge-completions'."
(if (and point (< point (length string)))
(let ((prefix (substring string 0 point))
(suffix (substring string point)))
(append (completion-pcm--string->pattern prefix)
'(point)
(completion-pcm--string->pattern suffix)))
(let* ((pattern nil)
(p 0)
(p0 p)
(pending nil))
(while (and (setq p (string-match completion-pcm--delim-wild-regex
string p))
(or completion-pcm-complete-word-inserts-delimiters
;; If the char was added by minibuffer-complete-word,
;; then don't treat it as a delimiter, otherwise
;; "M-x SPC" ends up inserting a "-" rather than listing
;; all completions.
(not (get-text-property p 'completion-try-word string))))
;; Usually, completion-pcm--delim-wild-regex matches a delimiter,
;; meaning that something can be added *before* it, but it can also
;; match a prefix and postfix, in which case something can be added
;; in-between (e.g. match [[:lower:]][[:upper:]]).
;; This is determined by the presence of a submatch-1 which delimits
;; the prefix.
(if (match-end 1) (setq p (match-end 1)))
(unless (= p0 p)
(if pending (push pending pattern))
(push (substring string p0 p) pattern))
(setq pending nil)
(if (eq (aref string p) ?*)
(progn
(push 'star pattern)
(setq p0 (1+ p)))
(push 'any pattern)
(if (match-end 1)
(setq p0 p)
(push (substring string p (match-end 0)) pattern)
;; `any-delim' is used so that "a-b" also finds "array->beginning".
(setq pending 'any-delim)
(setq p0 (match-end 0))))
(setq p p0))
(when (> (length string) p0)
(if pending (push pending pattern))
(push (substring string p0) pattern))
(nreverse pattern))))